import { ElMessage } from 'element-plus';
import request from '@/Newapi/request/request';

// 部门管理相关接口前缀
const API_PREFIX = '/static';

// 部门管理相关接口
const DEPARTMENT_LIST_ENDPOINT = '/depart/list';     // 部门列表查询接口
const DEPARTMENT_ADD_ENDPOINT = '/role/add';         // 添加部门接口
const DEPARTMENT_UPDATE_ENDPOINT = '/role/update';   // 更新部门接口
const DEPARTMENT_DELETE_ENDPOINT = '/depart/';       // 删除部门接口
const DEPARTMENT_ADD_ADMIN_ENDPOINT = '/depart/addAdmin';  // 添加部门管理员接口
const DEPARTMENT_UPDATE_ADMIN_ENDPOINT = '/depart/upAdmin'; // 修改部门管理员接口

// 部门管理接口
export const departmentService = {
  // 获取部门列表数据，支持分页和搜索
  async getDepartmentList(page = 1, pageSize = 20, searchParams = {}): Promise<any> {
    try {
      // 构建查询参数
      const queryParams: Record<string, any> = {
        page: page,
        pageSize: pageSize
      };
      
      // 如果有搜索条件，添加到查询参数中
      if (Object.keys(searchParams).length > 0) {
        queryParams.where = JSON.stringify(searchParams);
      }
      const response = await request.get(`${API_PREFIX}${DEPARTMENT_LIST_ENDPOINT}`, queryParams);      
      // 检查响应结构
      if (response) {
        // 格式: { data: { rows: [...], total: n } }
        if (response.data && Array.isArray(response.data.rows)) {
          console.log('API: 获取部门列表成功, 数量:', response.data.rows.length);
          return {
            list: response.data.rows,
            total: response.data.total || response.data.rows.length
          };
        }
        // 直接返回数组
        else if (Array.isArray(response.data)) {
          console.log('API: 获取部门列表成功 (直接数组), 数量:', response.data.length);
          return {
            list: response.data,
            total: response.data.length
          };
        }
        // 无法处理的格式，返回空数组
        else {
          console.warn('API: 部门列表数据格式不符合预期:', response.data);
          ElMessage.warning('部门数据格式异常，请联系管理员');
          return { list: [], total: 0 };
        }
      } else {
        // 响应格式异常
        console.error('API: 部门列表接口响应格式异常:', response);
        ElMessage.error('获取部门列表失败，响应格式异常');
        return { list: [], total: 0 };
      }
    } catch (error) {
      // 网络错误或其他异常
      console.error('API: 获取部门列表请求失败:', error);
      ElMessage.error('获取部门列表失败，请检查网络连接');
      return { list: [], total: 0 };
    }
  },

  // 添加部门
  async addDepartment(departmentData: any): Promise<any> {
    try {
      console.log('添加部门，参数:', departmentData);
      
      const response = await request.post(`${API_PREFIX}${DEPARTMENT_ADD_ENDPOINT}`, departmentData);
      
      if (response) {
        console.log('添加部门成功:', response);
        ElMessage.success('添加部门成功');
        return response.data;
      } else {
        console.error('添加部门失败:', response);
        ElMessage.error('添加部门失败');
        throw new Error('添加部门接口返回异常');
      }
    } catch (error: any) {
      console.error('添加部门请求失败:', error);
      ElMessage.error(error.message || '添加部门失败');
      throw error;
    }
  },

  // 更新部门
  async updateDepartment(departmentData: any): Promise<any> {
    try {
      console.log('更新部门，参数:', departmentData);
      
      const response = await request.put(`${API_PREFIX}${DEPARTMENT_UPDATE_ENDPOINT}`, departmentData);
      
      if (response) {
        console.log('更新部门成功:', response);
        ElMessage.success('更新部门成功');
        return response.data;
      } else {
        console.error('更新部门失败:', response);
        ElMessage.error('更新部门失败');
        throw new Error('更新部门接口返回异常');
      }
    } catch (error: any) {
      console.error('更新部门请求失败:', error);
      ElMessage.error(error.message || '更新部门失败');
      throw error;
    }
  },

  // 删除部门
  async deleteDepartment(id: number): Promise<any> {
    try {
      console.log('删除部门，ID:', id);
      
      const response = await request.delete(`${API_PREFIX}${DEPARTMENT_DELETE_ENDPOINT}${id}`);
      
      if (response) {
        console.log('删除部门成功:', response);
        ElMessage.success('删除部门成功');
        return response.data;
      } else {
        console.error('删除部门失败:', response);
        ElMessage.error('删除部门失败');
        throw new Error('删除部门接口返回异常');
      }
    } catch (error: any) {
      console.error('删除部门请求失败:', error);
      ElMessage.error(error.message || '删除部门失败');
      throw error;
    }
  },

  // 添加部门管理员
  async addDepartmentAdmin(departmentId: number, userIds: number[]): Promise<any> {
    try {
      const data = {
        department_id: departmentId,
        user_ids: userIds
      };
      
      console.log('添加部门管理员，参数:', data);
      
      const response = await request.post(`${API_PREFIX}${DEPARTMENT_ADD_ADMIN_ENDPOINT}`, data);
      
      if (response) {
        console.log('添加部门管理员成功:', response);
        ElMessage.success('添加部门管理员成功');
        return response.data;
      } else {
        console.error('添加部门管理员失败:', response);
        ElMessage.error('添加部门管理员失败');
        throw new Error('添加部门管理员接口返回异常');
      }
    } catch (error: any) {
      console.error('添加部门管理员请求失败:', error);
      ElMessage.error(error.message || '添加部门管理员失败');
      throw error;
    }
  },

  // 更新部门管理员
  async updateDepartmentAdmin(departmentId: number, userIds: number[]): Promise<any> {
    try {
      const data = {
        department_id: departmentId,
        user_ids: userIds
      };
      
      console.log('更新部门管理员，参数:', data);
      
      const response = await request.put(`${API_PREFIX}${DEPARTMENT_UPDATE_ADMIN_ENDPOINT}`, data);
      
      if (response) {
        console.log('更新部门管理员成功:', response);
        ElMessage.success('更新部门管理员成功');
        return response.data;
      } else {
        console.error('更新部门管理员失败:', response);
        ElMessage.error('更新部门管理员失败');
        throw new Error('更新部门管理员接口返回异常');
      }
    } catch (error: any) {
      console.error('更新部门管理员请求失败:', error);
      ElMessage.error(error.message || '更新部门管理员失败');
      throw error;
    }
  }
}; 